package com.example.mysimpleexample.util;

import android.graphics.Color;
import android.os.CountDownTimer;
import android.widget.TextView;

import java.lang.ref.WeakReference;

public class CountDownTimerUtil {
    private WeakReference<TextView> tvCodeWr;
    private CountDownTimer timer;
    private int times = 60 * 1000;

    public CountDownTimerUtil(TextView textView) {
        super();
        this.tvCodeWr = new WeakReference<>(textView);
    }
    public void runTimer(){
        /**
         * CountDownTimer(int param1,int param2)
         * param1:倒计时总长
         * param2:倒计时间隔
         */
        timer = new CountDownTimer(times,1000) {
            /**
             * 每次间隔指定时间的回调
             * @param millisUntilFinished
             */
            @Override
            public void onTick(long millisUntilFinished) {
                if (tvCodeWr.get() != null) {
                    tvCodeWr.get().setClickable(false);
                    tvCodeWr.get().setText(millisUntilFinished / 1000 + "s后重新获取");
                    tvCodeWr.get().setTextColor(Color.parseColor("#66666666"));
                }
            }

            /**
             * 倒计时结束的回调
             */
            @Override
            public void onFinish() {
                if (tvCodeWr.get() != null) {
                    tvCodeWr.get().setClickable(true);
                    tvCodeWr.get().setText("重新获取");
                    tvCodeWr.get().setTextColor(Color.parseColor("#ff0000"));
                }
            }
        }.start();
    }

    /**
     * 这个方法可以在activity或者fragment销毁的时候调用，防止内存泄漏
     * 如果在activity或者fragment关闭销毁的时候没有调用cancle方法，它的onTick方法还是会继续执行，这个时候UI控件都为空，不注意判断的话很容易空指针
     */
    public void cancel(){
        if (timer != null) {
            timer.onFinish();
            timer.cancel();
            timer = null;
        }
    }
}
